#include "stm32f10x.h"

void init_gpio(uint32_t RCC_APB2Periph,GPIO_TypeDef * gpio_typeDef,GPIOMode_TypeDef gpio_mode,uint16_t gpio_pins){
   //  为GPIOA 启用时钟	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph,ENABLE);
	
	GPIO_InitTypeDef gpio_init_def;
	
    // 配置该引脚为 推挽输出
	gpio_init_def.GPIO_Mode = gpio_mode;
	
    // 设置目标引脚
	gpio_init_def.GPIO_Pin= gpio_pins ;
	
    // 配置引脚的时钟频率
	gpio_init_def.GPIO_Speed=GPIO_Speed_50MHz;
	
    //初始化GPIOA
	GPIO_Init(gpio_typeDef,&gpio_init_def);
    
}  

void init_gpio_pp(uint32_t RCC_APB2Periph,GPIO_TypeDef * gpio_typeDef,uint16_t gpio_pins){


	init_gpio( RCC_APB2Periph, gpio_typeDef,GPIO_Mode_Out_PP,gpio_pins);
}

void init_gpio_ipu(uint32_t RCC_APB2Periph,GPIO_TypeDef * gpio_typeDef,uint16_t gpio_pins){


	init_gpio( RCC_APB2Periph, gpio_typeDef,GPIO_Mode_IPU,gpio_pins);
}

void init_gpio_ipd(uint32_t RCC_APB2Periph,GPIO_TypeDef * gpio_typeDef,uint16_t gpio_pins){


	init_gpio( RCC_APB2Periph, gpio_typeDef,GPIO_Mode_IPD,gpio_pins);
}


  

void high_level_signal(GPIO_TypeDef * gpio_typeDef,uint16_t gpio_pins){

	GPIO_SetBits(gpio_typeDef,gpio_pins);
	
}

void low_level_signal(GPIO_TypeDef * gpio_typeDef,uint16_t gpio_pins){

	GPIO_ResetBits(gpio_typeDef,gpio_pins);

}

uint8_t read_gpio_status(GPIO_TypeDef * gpio_typeDef,uint16_t gpio_pin){


	return GPIO_ReadOutputDataBit(gpio_typeDef, gpio_pin);

}